wpa_supplicant: use a timer to defer starting interfaces
authorFelix Fietkau <[email protected]>
Fri, 31 Oct 2025 18:33:21 +0000 (18:33 +0000)
committerFelix Fietkau <[email protected]>
Fri, 31 Oct 2025 20:22:35 +0000 (21:22 +0100)
This allows wpa_supplicant to process pending netlink socket messages
first. Without this change, there is a race condition where the newly
created interface processes netlink events from the removal of the
previous interface.

Signed-off-by: Felix Fietkau <[email protected]>
package/network/services/hostapd/files/wpa_supplicant.uc

index 20613ae702d6cbcdaf61c8391aa1c36b2b88e5cd..2f0279d06902f5964870460967a7687daaa1c93a 100644 (file)
@@ -1,4 +1,5 @@
 let libubus = require("ubus");
+import * as uloop from "uloop";
 import { open, readfile } from "fs";
 import { wdev_create, wdev_set_mesh_params, wdev_remove, is_equal, wdev_set_up, vlist_new, phy_open } from "common";
 
@@ -549,7 +550,7 @@ let main_obj = {
                                set_config(phy, req.args.phy, req.args.radio, req.args.num_global_macaddr, req.args.macaddr_base, req.args.config);
 
                        if (!req.args.defer)
-                               start_pending(phy);
+                               uloop.timer(100, () => start_pending(phy));
 
                        return {
                                pid: wpas.getpid()